package Gestores.DtoObjects;

import Gestores.DaoInterfaces.TituloProvisionNacionalDAO;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadTituloProvisionNacional;
import Gestores.NucleoBaseDatos;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class TituloProvisionNacionalDTO implements TituloProvisionNacionalDAO {

    private DataBaseLink gestor;

    public TituloProvisionNacionalDTO() {
        gestor = NucleoBaseDatos.getInstance();
    }

    @Override
    public ArrayList<Object> buscarPorNumero(int numero) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloProvisionNacionalPorNumero(" + numero + ");"));
    }

    @Override
    public ArrayList<Object> buscarPorId(String id) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloProvisionNacionalPorIdAfiliado('" + id + "');"));
    }

    @Override
    public ArrayList<Object> buscarPorFecha(Date fecha) throws Exception {
        return devolverLista(gestor.executeSql("Call BuscarTituloProvisionNacionalPorfecha('" + fecha.toString() + "');"));
    }

    @Override
    public void insertar(Object objeto) throws Exception {
        EntidadTituloProvisionNacional etpn = (EntidadTituloProvisionNacional) objeto;
        gestor.executeSql("Call InsertarTituloProvisionNacional(" + etpn.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        String idAfiliado = (String) primaryKey;
        EntidadTituloProvisionNacional etpn = (EntidadTituloProvisionNacional) objeto;
        gestor.executeSql("Call ActualizarTituloProvisionNacional('" + idAfiliado + "'," + etpn.cadenaParaActualizacion() + ");");
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        EntidadTituloProvisionNacional etpn = (EntidadTituloProvisionNacional) objeto;
        gestor.executeSql("Call EliminarTituloProvisionNacional(" + etpn.cadenaParaEliminacion() + ");");
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        return devolverLista(gestor.executeSql("Call ListarTituloProvisionNacional()"));
    }

    @Override
    public boolean existe(int numero) throws Exception {
        ResultSet resultado = gestor.executeSql("Select ExisteTituloProvisionNacional(" + numero + ");");
        resultado.next();
        return resultado.getBoolean(1);
    }

    private ArrayList<Object> devolverLista(ResultSet executeSql) throws SQLException {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (executeSql.next()) {
            EntidadTituloProvisionNacional etpn = new EntidadTituloProvisionNacional();
            etpn.setNumero(executeSql.getInt(1));
            etpn.setIdAfiliado(executeSql.getString(2));
            etpn.setDescripcion(executeSql.getString(3));
            etpn.setFecha(executeSql.getDate(4));

            lista.add(etpn);
        }
        return lista;
    }
}
